import axios from 'axios'

/**
 * 装饰器-柯里化（因为装饰器只会接收后面函数的一些参数进行操作)
 * @装饰器名 = @自定义函数(参数)，随后在自定义函数中返回装饰器函数 
 * 所以我们先用Get()接收url，在装饰器内部就能使用url参数，最终返回装饰器函数就行了
 */

const Get = (url: string) => {
  //返回装饰器函数
  return (target: any, key: any, descriptor: PropertyDescriptor) => {
    const fnc = descriptor.value;  //getList()函数
    axios.get(url).then(res => {
      fnc(res, { status: 200, success: true })
    }).catch(e => {
      fnc(e, { status: 500, success: false })
    })
  }
}


class Controller {
  constructor() { }

  //@用来接收装饰器(方法)
  @Get('http://jsonplaceholder.typicode.com/posts')
  getList(res: any, status: any) {
    console.log(res, status);
  }
}
